From 7ca418a79afed9d8b99644439e769c0416ee2263 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Florian=20M=C3=BCllner?= Date: Mon, 30 Jul 2018 14:35:27 +0200 Subject: [PATCH] Explicitly convert raw data to strings As strings are guaranteed to use UTF-8 in the GNOME platform, generic file APIs like g_file_load_contents() return raw data instead. Since gjs' recent update to mozjs60, this data is now returns as Uint8Array which cannot simply be treated as string - its toString() method boils down to arr.join(',') - so use gjs' new ByteArray module to explicitly convert the data. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/179 --- js/misc/extensionUtils.js | 2 ++ js/ui/keyboard.js | 2 ++ js/ui/padOsd.js | 2 ++ js/ui/sessionMode.js | 2 ++ 4 files changed, 8 insertions(+) diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js index 9f77b4c40..6e39f87d7 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js @@ -112,6 +112,8 @@ function createExtensionObject(uuid, dir, type) { let metadataContents, success, tag; try { [success, metadataContents, tag] = metadataFile.load_contents(null); + if (metadataContents instanceof Uint8Array) + metadataContents = imports.byteArray.toString(metadataContents); } catch (e) { throw new Error('Failed to load metadata.json: ' + e); } diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 1fefb8c6c..1666a507b 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -472,6 +472,8 @@ var KeyboardModel = new Lang.Class({ _loadModel(groupName) { let file = Gio.File.new_for_uri('resource:///org/gnome/shell/osk-layouts/%s.json'.format(groupName)); let [success, contents] = file.load_contents(null); + if (contents instanceof Uint8Array) + contents = imports.byteArray.toString(contents); return JSON.parse(contents); }, diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js index 9b5986985..8ef20b67b 100644 --- a/js/ui/padOsd.js +++ b/js/ui/padOsd.js @@ -313,6 +313,8 @@ var PadDiagram = new Lang.Class({ _init(params) { let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/pad-osd.css'); let [success, css, etag] = file.load_contents(null); + if (css instanceof Uint8Array) + css = imports.byteArray.toString(css); this._curEdited = null; this._prevEdited = null; this._css = css; diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js index aac29ae5e..e22176415 100644 --- a/js/ui/sessionMode.js +++ b/js/ui/sessionMode.js @@ -117,6 +117,8 @@ function _loadMode(file, info) { let fileContent, success, tag, newMode; try { [success, fileContent, tag] = file.load_contents(null); + if (fileContent instanceof Uint8Array) + fileContent = imports.byteArray.toString(fileContent); newMode = JSON.parse(fileContent); } catch(e) { return; -- 2.39.5